package com.obelisco.modelo.servicios.seguridad;

import java.util.List;

import com.obelisco.exception.ObeliscoException;
import com.obelisco.modelo.dao.ICarpetaTransaccionDAO;
import com.obelisco.modelo.dao.IUsuarioDAO;
import com.obelisco.modelo.dao.hibernate.GrupoDAO;
import com.obelisco.modelo.dao.hibernate.SistemaDAO;
import com.obelisco.modelo.data.CarpetaTransaccion;
import com.obelisco.modelo.data.Sistema;
import com.obelisco.modelo.data.Usuario;

public class ServicioAutenticarUsuario implements IServicioAutenticarUsuario {

	private IUsuarioDAO usuarioDAO;

	private ICarpetaTransaccionDAO carpetaTransaccionDAO;
	
	private IServicioSeguridad servicioSeguridad;

	Sistema sistema;
	
	// Agregados por Edgar pastran
	private GrupoDAO grupoDAO;
	private SistemaDAO sistemaDAO;

	private void cargarTransacciones(Usuario usuario) {
		CarpetaTransaccion carpetaRaiz = carpetaTransaccionDAO
				.findTree(sistema,usuario);
		usuario.setFunciones(carpetaRaiz);
	}
	
	public Usuario validarCredenciales(String login, String password) throws ObeliscoException {
		Usuario usuario = null;		
		List<Usuario> usuarios = getUsuarioDAO().findByProperty("login", login);
		if (usuarios != null && usuarios.size() > 0)
			usuario = usuarios.get(0);
		
		if (usuario == null || usuario.getEstado().equals("B") || usuario.getEstado().equals("L") || !usuario.getContrasena().equals(password))
			throw new ObeliscoException("Credenciales de Usuario Incorrectas");
		
		cargarTransacciones(usuario);
		return usuario;
	}


	public Sistema getSistema() {
		return sistema;
	}

	public void setSistema(Sistema sistema) {
		this.sistema = sistema;
	}

	public ICarpetaTransaccionDAO getCarpetaTransaccionDAO() {
		return carpetaTransaccionDAO;
	}

	public void setCarpetaTransaccionDAO(
			ICarpetaTransaccionDAO carpetaTransaccionDAO) {
		this.carpetaTransaccionDAO = carpetaTransaccionDAO;
	}

	public IUsuarioDAO getUsuarioDAO() {
		return usuarioDAO;
	}

	public void setUsuarioDAO(IUsuarioDAO usuarioDAO) {
		this.usuarioDAO = usuarioDAO;
	}

	public IServicioSeguridad getServicioSeguridad() {
		return servicioSeguridad;
	}

	public void setServicioSeguridad(IServicioSeguridad servicioSeguridad) {
		this.servicioSeguridad = servicioSeguridad;
	}
	
	public GrupoDAO getGrupoDAO() {
		return grupoDAO;
	}

	public void setGrupoDAO(GrupoDAO grupoDAO) {
		this.grupoDAO = grupoDAO;
	}

	public SistemaDAO getSistemaDAO() {
		return sistemaDAO;
	}

	public void setSistemaDAO(SistemaDAO sistemaDAO) {
		this.sistemaDAO = sistemaDAO;
	}

}
